package com.qf.spring2202.springfactory.factorybean;

import org.springframework.beans.factory.FactoryBean;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * FactoryBean 接口的作用
 * 如果需要SpringIOC容器创建一些特殊的对象（特殊指的是，该对象的创建过程不能通过调用构造函数然后setter注入的方式创建）
 * 就需要实现 FactoryBean 接口
 * 把创建的对象的逻辑写在 该接口中的  getObject 方法中即可。
 */
public class ConnFactoryBean implements FactoryBean<Connection> {

    /**
     * 真正创建对象的代码写在这个方法里面
     * 当Spring的IOC容器需要创建 com.qf.spring2202.springfactory.factorybean.ConnFactoryBean 类型的bean时，
     * 会自动调用该方法，返回的对象，就是IOC容器返回的bean
     * @return
     * @throws Exception
     */
    @Override
    public Connection getObject() throws Exception {

        Class.forName("com.mysql.jdbc.Driver");

        final Connection connection = DriverManager.getConnection("jdbc:mysql://49.232.214.218:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "root");

        return connection;
    }

    /**
     * 返回对象的类型
     * @return
     */
    @Override
    public Class<?> getObjectType() {
        return Connection.class;
    }

    /**
     * 当前bean在IOC容器中是不是单例
     * @return true 代表当前对象是单例模式
     */
    @Override
    public boolean isSingleton() {
        return false;
    }
}
